#ifndef __cplusplus
#error "Only for C++!"
#endif

#ifndef CMPCXX_H_
#define CMPCXX_H_

#include <string>
#include <vector>
#include <set>

namespace cmpcxx {

using namespace std;

// io
vector<string> readTxtFile(const string& filePath);

// log
void cmp_title(const string& content, int half_len = 32);
void cmp_newline(int n);

// math
double accuracy(const vector<int>& pred, const vector<int>& gt);

// path
string get_base_main_name(const string& path);
string get_main(const string& path);
string get_ext(const string& path);
string get_dir(const string& path);
string get_base(const string& path);
void path_split(const string& path, string& dir, string& base);
void path_split_ext(const string& path, string& main, string& ext);
string path_remove_tail_slash(const string& path);
string path_remove_head_slash(const string& path);
string path_join(const string& path1, const string& path2);
vector<string> glob(const string& pattern);
string getLabel(const string& filePath, bool isRemoveExt=true, char sep='_');

// stl
template <typename T>
std::vector<size_t> argsort(const std::vector<T> &v);
template <typename T>
std::string set2string(const std::set<T> set);

}; //namespace cmpcxx

#endif // CMPCXX_H_
